﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using System.Data.Entity.Database;
using EGEHaina.Models;
using EGEHaina.Areas.People.Models;
using EGEHaina.Areas.Contract.Models;
using EGEHaina.Areas.General.Models;


namespace EGEHaina
{
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801

    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
        }

        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });

        }

        protected void Application_Start()
        {
            DbDatabase.SetInitializer(new EGEHainaContextInitializer());

            AreaRegistration.RegisterAllAreas();

            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);
        }

        public class EGEHainaContextInitializer : DropCreateDatabaseIfModelChanges<EGEHainaContext> 
        {
            protected override void Seed(EGEHainaContext context)
            {
                base.Seed(context);

                // COMPANY TYPE
                CompanyType cLocales = context.CompanyTypes.Add(new CompanyType
                {
                    Name = "Compañias Locales",
                    Description = "companias locales",
                });

                CompanyType cInternacionales = context.CompanyTypes.Add(new CompanyType
                {
                    Name = "Compañias Internacionales",
                    Description = "companias internacionales",
                });

                CompanyType cPersonas = context.CompanyTypes.Add(new CompanyType
                {
                    Name = "Personas Fisicas",
                    Description = "empresas unipersonales",
                });

                context.SaveChanges();

                // CONTRACT TYPE
                context.ContractTypes.Add(new ContractType() {
                    Name = "Alquiler (Locales comerciales, viviendas, alquiler de postes)",
                    Description = ""
                });

                context.ContractTypes.Add(new ContractType() {
                    Name = "Construccion",
                    Description = ""
                });

                context.ContractTypes.Add(new ContractType()
                {
                    Name = "Servicios",
                    Description = ""
                });

                context.ContractTypes.Add(new ContractType()
                {
                    Name = "Servidumbre de paso",
                    Description = ""
                });

                context.ContractTypes.Add(new ContractType()
                {
                    Name = "Acuerdos de pago",
                    Description = ""
                });

                context.ContractTypes.Add(new ContractType()
                {
                    Name = "Contrato suministro de energia electrica de media tension",
                    Description = ""
                });

                context.ContractTypes.Add(new ContractType()
                {
                    Name = "Contrato suministro de energia electrica de baja tension",
                    Description = ""
                });

                context.ContractTypes.Add(new ContractType()
                {
                    Name = "Acuerdos de confidencialidad",
                    Description = ""
                });

                context.ContractTypes.Add(new ContractType()
                {
                    Name = "Terminos y condiciones",
                    Description = ""
                });

                context.ContractTypes.Add(new ContractType()
                {
                    Name = "Acuerdos fraudes electricos",
                    Description = ""
                });

                context.ContractTypes.Add(new ContractType()
                {
                    Name = "Cesion de derechos",
                    Description = ""
                });

                context.ContractTypes.Add(new ContractType()
                {
                    Name = "Venta de energia termica",
                    Description = ""
                });

                context.ContractTypes.Add(new ContractType()
                {
                    Name = "Suministro y venta de energia",
                    Description = ""
                });

                context.SaveChanges();

                // DEPARTMENT
                context.Departments.Add(new Department()
                {
                    Name = "Contabilidad",
                    Description = ""
                });

                context.Departments.Add(new Department()
                {
                    Name = "Finanzas",
                    Description = ""
                });

                context.Departments.Add(new Department()
                {
                    Name = "Gerencia",
                    Description = ""
                });

                context.Departments.Add(new Department()
                {
                    Name = "Recursos Humanos",
                    Description = ""
                });

                context.SaveChanges();

                // REQUIRED DOCUMENT BY COMPANY LOCAL
                context.RequiredDocuments.Add(new RequiredDocument() { 
                    Name = "Copia de los estatutos sociales de la empresa",
                    Description = "Copia de los estatutos sociales de la empresa",
                    CompanyType = cLocales,
                    CompanyTypeId = cLocales.CompanyTypeId
                });

                context.RequiredDocuments.Add(new RequiredDocument() {
                    Name = "Copia de última asamblea de accionistas, en donde se designa al consejo de dirección vigente de la misma.",
                    Description = "Copia de última asamblea de accionistas, en donde se designa al consejo de dirección vigente de la misma.",
                    CompanyType = cLocales,
                    CompanyTypeId = cLocales.CompanyTypeId
                });

                context.RequiredDocuments.Add(new RequiredDocument()
                {
                    Name = "Copia del Registro Mercantil vigente.",
                    Description = "Copia del Registro Mercantil vigente.",
                    CompanyType = cLocales,
                    CompanyTypeId = cLocales.CompanyTypeId
                });

                context.RequiredDocuments.Add(new RequiredDocument()
                {
                    Name = "Copia de la tarjeta de identificación tributaria.",
                    Description = "Copia de la tarjeta de identificación tributaria.",
                    CompanyType = cLocales,
                    CompanyTypeId = cLocales.CompanyTypeId
                });

                context.RequiredDocuments.Add(new RequiredDocument()
                {
                    Name = "Copia del documento de identidad representante que va a firmar el contrato.",
                    Description = "Copia del documento de identidad representante que va a firmar el contrato.",
                    CompanyType = cLocales,
                    CompanyTypeId = cLocales.CompanyTypeId
                });

                context.RequiredDocuments.Add(new RequiredDocument()
                {
                    Name = "Poder de representación que se le otorgue a quien firmará el contrato (si aplica).",
                    Description = "Poder de representación que se le otorgue a quien firmará el contrato (si aplica).",
                    CompanyType = cLocales,
                    CompanyTypeId = cLocales.CompanyTypeId
                });

                // REQUIRED DOCUMENT BY COMPANY INTERNATIONAL
                context.RequiredDocuments.Add(new RequiredDocument()
                {
                    Name = "Copia del documento de identidad de la persona que va a firmar el contrato.",
                    Description = "Copia del documento de identidad de la persona que va a firmar el contrato.",
                    CompanyType = cInternacionales,
                    CompanyTypeId = cInternacionales.CompanyTypeId
                });

                context.RequiredDocuments.Add(new RequiredDocument()
                {
                    Name = "Certificado de incorporación.",
                    Description = "Certificado de incorporación.",
                    CompanyType = cInternacionales,
                    CompanyTypeId = cInternacionales.CompanyTypeId
                });

                context.RequiredDocuments.Add(new RequiredDocument()
                {
                    Name = "Copia del acta donde se autoriza a la persona a firmar contratos en RD.",
                    Description = "Copia del acta donde se autoriza a la persona a firmar contratos en RD.",
                    CompanyType = cInternacionales,
                    CompanyTypeId = cInternacionales.CompanyTypeId
                });

                context.RequiredDocuments.Add(new RequiredDocument()
                {
                    Name = "Copia del acta donde se autoriza a la persona a firmar contratos en RD.",
                    Description = "Copia del acta donde se autoriza a la persona a firmar contratos en RD.",
                    CompanyType = cInternacionales,
                    CompanyTypeId = cInternacionales.CompanyTypeId
                });

                context.RequiredDocuments.Add(new RequiredDocument()
                {
                    Name = "Portafolio de la Compañía ( Company Profile )",
                    Description = "Portafolio de la Compañía ( Company Profile )",
                    CompanyType = cInternacionales,
                    CompanyTypeId = cInternacionales.CompanyTypeId
                });

                context.RequiredDocuments.Add(new RequiredDocument()
                {
                    Name = "Estatutos de la Compañía",
                    Description = "Estatutos de la Compañía",
                    CompanyType = cInternacionales,
                    CompanyTypeId = cInternacionales.CompanyTypeId
                });

                context.RequiredDocuments.Add(new RequiredDocument()
                {
                    Name = "Distribuidor o representante autorizado",
                    Description = "En caso de ser distribuidor o representante autorizado: Carta certificada de la casa matriz donde consta la calidad de la empresa como distribuidor autorizado. En este último caso, los responsables del proceso requerirán al Departamento Internacional del Banco Central, una certificación que haga constar que no existe un distribuidor registrado a título exclusivo para ese producto o servicio.",
                    CompanyType = cInternacionales,
                    CompanyTypeId = cInternacionales.CompanyTypeId
                });

                // REQUIRED DOCUMENT BY COMPANY UNIPERSONAL
                context.RequiredDocuments.Add(new RequiredDocument()
                {
                    Name = "Documento de Identidad ",
                    Description = "Documento de Identidad (cédula de identidad y electoral, Pasaporte, Carnet de Residencia,Licencia de Conducir, etc.)",
                    CompanyType = cPersonas,
                    CompanyTypeId = cPersonas.CompanyTypeId
                });

                context.RequiredDocuments.Add(new RequiredDocument()
                {
                    Name = "Otro documento o certificado.",
                    Description = "En caso de ser distribuidor o representante autorizado: Carta certificada de la casa matriz donde consta la calidad de la empresa como distribuidor autorizado. En este último caso, los responsables del proceso requerirán al Departamento Internacional del Banco Central, una certificación que haga constar que no existe un distribuidor registrado a título exclusivo para ese producto o servicio.",
                    CompanyType = cPersonas,
                    CompanyTypeId = cPersonas.CompanyTypeId
                });

                context.SaveChanges();

            }   
        }
    }
}